# 使用与宿主机 CUDA 版本匹配的官方基础镜像
FROM nvidia/cuda:12.2.2-cudnn8-runtime-ubuntu22.04

# --- 环境变量 ---
# 防止 apt-get 在安装时进行交互式提问
ENV DEBIAN_FRONTEND=noninteractive
# 将 Python 输出设置为无缓冲，以便日志能立即显示
ENV PYTHONUNBUFFERED=1

# --- 安装系统依赖和 Python 3.12 ---
# 更新包列表，安装 PPA 管理工具，添加 deadsnakes PPA，然后安装 Python 3.12
RUN apt-get update && \
    apt-get install -y software-properties-common curl && \
    add-apt-repository ppa:deadsnakes/ppa && \
    apt-get update && \
    apt-get install -y \
    python3.12 \
    python3.12-dev \
    build-essential \
    ffmpeg \
    espeak-ng \
    && rm -rf /var/lib/apt/lists/*

# 安装最新的 pip
RUN curl -sS https://bootstrap.pypa.io/get-pip.py | python3.12

# 将 python3.12 设置为默认的 python
RUN ln -sf /usr/bin/python3.12 /usr/bin/python3 && \
    ln -sf /usr/bin/python3.12 /usr/bin/python

# --- 设置应用目录 ---
WORKDIR /app

# --- 安装 Python 依赖 ---
ENV CXXFLAGS="-Wno-narrowing"
# 使用 uv 进行快速的依赖安装
COPY ./requirements.txt /app/
RUN pip install -r requirements.txt

RUN python -m spacy download en_core_web_sm

# --- 复制应用代码 ---
# 我们将只复制应用代码。模型将通过卷挂载的方式在运行时提供。
COPY ./main.py /app/

# --- 暴露端口 ---
# 告诉 Docker 容器将监听 8000 端口
EXPOSE 8000

# --- 容器启动命令 ---
# 使用虚拟环境中的 uvicorn 运行服务器
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
